package blade.cli.cmds;
import blade.cli.MigrateOptions;
import blade.cli.blade;
import blade.cli.util.ConsoleProgressMonitor;
import blade.migrate.api.Migration;
import blade.migrate.api.Problem;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Collections;
import java.util.Formatter;
import java.util.List;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;
public class MigrateCommand {
final private blade blade;
final private MigrateOptions options;
public MigrateCommand(blade blade, MigrateOptions options)
throws Exception {
this.blade = blade;
this.options = options;
List<String> args = options._arguments();
if (args.size() == 0) {
// Default command
printHelp();
}
else {
execute();
}
}
private void addError(String prefix, String msg) {
blade.addErrors(prefix, Collections.singleton(msg));
}
private void execute() throws Exception {
File projectDir = new File(options._arguments().get(0));
if (!projectDir.exists()) {
addError("migrate", "projectDir does not exist");
return;
}
final BundleContext context = FrameworkUtil.getBundle(
this.getClass()).getBundleContext();
Format format = options.format();
FileOutputStream fos = null;
if (options._arguments().size() > 1) {
File file = new File(options._arguments().get(1));
if (!file.exists()) {
file.createNewFile();
}
fos = new FileOutputStream(file);
}
ServiceReference<Migration> migrationSR = context.getServiceReference(Migration.class);
Migration migrationService = context.getService(migrationSR);
List<Problem> problems = migrationService.findProblems(projectDir, new ConsoleProgressMonitor());
String formatValue = format != null ? format.toString() : "";
if (options.detailed()) {
migrationService.reportProblems(problems, Migration.DETAIL_LONG, formatValue, fos);
}
else {
migrationService.reportProblems(problems, Migration.DETAIL_SHORT, formatValue, fos);
}
}
private void printHelp() throws Exception {
Formatter f = new Formatter();
options._command().help(f, this);
blade.out().println(f);
f.close();
}
}